Computers typically execute programs in one or more processes or threads on one or more processors. In developing computer programs, programmers often use “debugging” tools to enable them to verify correct operation of the programs. Debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus making it behave as expected. Debugging tends to be harder when various subsystems are tightly coupled, as changes in one may cause bugs to emerge in another. Using debugging tools, programmers can step through a program and determine whether the results that the program generates at various points are as would be expected.
Debugging ranges, in complexity, from fixing simple errors to performing lengthy and tiresome tasks of data collection, analysis, and scheduling updates. The debugging skill of the programmer can be a major factor in the ability to debug a problem, but the difficulty of software debugging varies greatly with the complexity of the system, and also depends, to some extent, on the programming language(s) used and the available tools, such as debuggers. Debuggers are software tools which enable the programmer to monitor the execution of a program, stop it, re-start it, set breakpoints, and change values in memory. The term “debugger” can also refer to the person who is doing the debugging.
Remote debugging has been widely used in recent years. Remote debugging is the process of debugging a program running on a system different than the debugger. To start remote debugging, the debugger connects to a remote system over a network. Once connected, the debugger can control the execution of the program on the remote system and retrieve information about its state.
In some situations, when a system error occurs on a target machine, traceback data representing logging of the execution of instructions that cause the system error may be transmitted to a remote system for offline analysis. Often, a bug report received at the remote system is incomplete with respect to the system or storage setup of the remote system. As a result, the bug cannot be replicated at the remote system.